//
//  HXDTextView+Extension.swift
//  weibo
//
//  Created by huxuedong on 15/12/17.
//  Copyright © 2015年 huxuedong. All rights reserved.
//

import UIKit

extension HXDPlusTextView {
    
    //拼接表情对应的文字字符串
    var emoticonText: String {
        //表情字符串
        var emoticonString = String()
        //遍历富文本，infoDict：文本的属性字典(大小、颜色等)，range：当前遍历到的范围，_：置空，表示不停止遍历(赋值时停止遍历)
        attributedText.enumerateAttributesInRange(NSMakeRange(0, attributedText.length), options: []) { (infoDict, range, _) -> Void in
            //如果有文本附件(不是文字或者Emoji字符串)
            if let attachment = infoDict["NSAttachment"] as? HXDTextAttachment {
                //获取文本附件对应图片的表情字符串(swift中，字符串拼接可以直接用"+")
                emoticonString += attachment.emoticon!.chs!
            } else {
                //通过遍历到的range，截取文字或者Emoji字符串
                emoticonString += (self.attributedText.string as NSString).substringWithRange(range)
            }
        }
        return emoticonString
    }
    
    //插入表情
    func insertEmoticon(emoticon: HXDEmoticon) {
        if emoticon.isEmoji {
            //如果是Emoji表情，则将名称转化为表情，再插入到textView上
            insertText((emoticon.code! as NSString).emoji())
        } else {
            //保存当前设置的富文本
            let oldAttribute = NSMutableAttributedString(attributedString: attributedText)
            //创建文本附件
            let attachment = HXDTextAttachment()
            //利用文本附件生成新的富文本
            let newAttribute = attachment.attributeStringWithEmoticon(emoticon, font: font!)
            //获取选中内容的范围
            var range = selectedRange
            //指定范围的内容，用新的富文本替换旧的富文本
            oldAttribute.replaceCharactersInRange(range, withAttributedString: newAttribute)
            //设置旧的富文本指定范围的字体大小
            oldAttribute.addAttribute(NSFontAttributeName, value: font!, range: NSMakeRange(0, oldAttribute.length))
            //将设置完成的旧的富文本添加到textView
            attributedText = oldAttribute
            //每添加一个表情，range的起始点加1
            range.location += 1
            //指定range的范围长度为0，光标位置
            range.length = 0
            //设置选中范围
            selectedRange = range
            //发送通知，监听文字改变
            NSNotificationCenter.defaultCenter().postNotificationName(UITextViewTextDidChangeNotification, object: self)
            //调用代理方法
            delegate?.textViewDidChange?(self)
        }
    }
    
}
